package app.inmos.functions.json;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import app.inmos.constants.Constantes;
import app.inmos.exception.InmobiliariaNoEncontradaException;
import app.inmos.json.interfaces.IUtilsJSON;
import app.inmos.model.Inmobiliaria;


/**
 * Clase que se utiliza para obtener los datos de la Inmobiliaria mediante JSON.
 * @author Lisandro
 *
 */

public class InmobiliariaUtilsJSON extends BaseUtilsJSON implements IUtilsJSON{
	
	
	private static InmobiliariaUtilsJSON inmobiliariaUtils;
	
	private Inmobiliaria inmobiliaria;
	
	
	/**
	 * Singleton de InmobiliariaUtils
	 * @return
	 * @throws InmobiliariaNoEncontradaException 
	 */
	public static InmobiliariaUtilsJSON getInstance() throws InmobiliariaNoEncontradaException {
		
		if (inmobiliariaUtils == null) {
			inmobiliariaUtils = new InmobiliariaUtilsJSON();
		}
		return inmobiliariaUtils;
		
	}

	public InmobiliariaUtilsJSON() throws InmobiliariaNoEncontradaException{
		setInmobiliaria(getInmobiliaria(obtenerEstructuraJSON()));
		
	}
	
	/**
	 * Se arma el objeto 'Publicacion' con la estructura JSON correspondiente.
	 * @param pJSONObject
	 * @return
	 */
	public Inmobiliaria getDevolverInmobiliaria(JSONObject pJSONObject){
		
		Inmobiliaria inmo= new Inmobiliaria();
		
		try {
			
			inmo.setIdInmobiliaria(Integer.valueOf(pJSONObject.getString("idInmobiliaria")));
			inmo.setDescripcion(pJSONObject.getString("descripcion").equals("")? Constantes.MSJ_INFO_NO_DISPONIBLE:pJSONObject.getString("descripcion"));
			inmo.setDireccion(pJSONObject.getString("direccion").equals("")? Constantes.MSJ_INFO_NO_DISPONIBLE:pJSONObject.getString("direccion"));
			inmo.setHorarios(pJSONObject.getString("horarios").equals("")? Constantes.MSJ_INFO_NO_DISPONIBLE:pJSONObject.getString("horarios"));
			inmo.setMail(pJSONObject.getString("mail").equals("")? Constantes.MSJ_INFO_NO_DISPONIBLE:pJSONObject.getString("mail"));
			inmo.setStaff(pJSONObject.getString("staff").equals("")? Constantes.MSJ_INFO_NO_DISPONIBLE:pJSONObject.getString("staff"));
			inmo.setTelefono(pJSONObject.getString("telefono").equals("")? Constantes.MSJ_INFO_NO_DISPONIBLE:pJSONObject.getString("telefono"));
			inmo.setTitulo(pJSONObject.getString("titulo").equals("")? Constantes.MSJ_INFO_NO_DISPONIBLE:pJSONObject.getString("titulo"));
			
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return inmo;
		
	}

	public static InmobiliariaUtilsJSON getInmobiliariaUtils() {
		return inmobiliariaUtils;
	}

	public static void setInmobiliariaUtils(InmobiliariaUtilsJSON inmobiliariaUtils) {
		InmobiliariaUtilsJSON.inmobiliariaUtils = inmobiliariaUtils;
	}

	/**
	 * 
	 * Devuelve los datos de la inmobiliaria
	 * @param pEstructuraJSON
	 * @return
	 * @throws InmobiliariaNoEncontradaException 
	 */
	public Inmobiliaria getInmobiliaria(String pEstructuraJSON) throws InmobiliariaNoEncontradaException {
		
		    JSONArray jsonArray;
		    Inmobiliaria inmobiliaria=null;
			
		    try {
				
			    jsonArray = new JSONArray(pEstructuraJSON);
			    // si los datos fueron cargados
		        if(jsonArray.length()>0){
	 	          JSONObject publicacionJSON = jsonArray.getJSONObject(0);
	 	           inmobiliaria= getDevolverInmobiliaria(publicacionJSON);
		        }
		        else{
		        	throw new InmobiliariaNoEncontradaException("Inmobiliaria no encontrada");
		        }
	 	        
	 	     
			} catch (JSONException e) {
				
				e.printStackTrace();
			}
		    
		    return inmobiliaria;
	         
	}

	public void setInmobiliaria(Inmobiliaria inmobiliaria) {
		this.inmobiliaria = inmobiliaria;
	}

	
   public Inmobiliaria getInmobiliaria() {
		return inmobiliaria;
	}

/** Se obtiene la estructura String de la publicacion
    * 
    */
	public String obtenerEstructuraJSON() {
		return obtenerStringJSONConURL("http://10.0.2.2/inmo_project_contreras/app/json/getDatosInmobiliaria.php");
	}
	
	
	

}
